【发布时间】:2017-09-03 08:51:45
【问题描述】:
我试图解决这个错误,但我不能。
主要活动代码
public class Reservation_main extends AppCompatActivity {
final String TAG = "ReservationMainActivity";
public static final String url = "http://10.0.2.2:81/PhpProject1/room.php";
RecyclerView recycle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reserve_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
recycle = (RecyclerView)findViewById(R.id.recycle);
recycle.setHasFixedSize(true);
LinearLayoutManager manager = new LinearLayoutManager(this);
recycle.setLayoutManager(manager);
StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, response);
ArrayList<Reservation_room_list> roomList = new JsonConverter<Reservation_room_list>()
.toArrayList(response, Reservation_room_list.class);
Reservation_room_adapter adapter = new Reservation_room_adapter(getApplicationContext(), roomList);
recycle.setAdapter(adapter);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if(error != null){
Log.d(TAG, error.toString());
Toast.makeText(getApplicationContext(), "Something went wrong.", Toast.LENGTH_LONG).show();
}
}
}
);
MySingleton.getInstance(getApplicationContext()).addToRequestQueue(stringRequest);
}
}
房间适配器
public class Reservation_room_adapter extends
RecyclerView.Adapter<Reservation_room_adapter.RoomViewHolder> {
private Context context;
private ArrayList<Reservation_room_list> room;
public Reservation_room_adapter(Context context, ArrayList<Reservation_room_list> room){
this.context = context;
this.room = room;
}
@Override
public RoomViewHolder onCreateViewHolder (ViewGroup parent, int type){
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.from(parent.getContext())
.inflate(R.layout.activity_reserve_layout, parent, false);
RoomViewHolder roomViewHolder = new RoomViewHolder(view);
return roomViewHolder;
}
@Override
public void onBindViewHolder (RoomViewHolder holder, int position){
Reservation_room_list rooms = room.get(position);
holder.roomNo.setText(rooms.roomid);
holder.price.setText("" + rooms.price);
holder.roomDescription.setText(rooms.type);
String fullUrl = "http://10.0.2.2:81/PhpProject1/" + rooms.image;
Picasso.with(context)
.load(fullUrl)
.placeholder(R.drawable.bed_room_web)
.error(android.R.drawable.stat_notify_error)
.into(holder.roomImage);
}
@Override
public int getItemCount(){
if (room != null){
return room.size();
}
return 0;
}
public static class RoomViewHolder extends RecyclerView.ViewHolder{
public CardView info;
public TextView roomNo;
public TextView roomDescription;
public TextView price;
public ImageView roomImage;
public RoomViewHolder(View roomView){
super(roomView);
info = (CardView) roomView.findViewById(R.id.view);
roomNo = (TextView) roomView.findViewById(R.id.room);
roomDescription = (TextView) roomView.findViewById(R.id.details);
price = (TextView) roomView.findViewById(R.id.price);
roomImage = (ImageView) roomView.findViewById(R.id.imageView2);
}
}
}
这是 room_list 代码
public class Reservation_room_list implements Serializable{
public String type;
public String image;
public String status;
public int roomid;
public int capacity;
public double price;
}
php代码
<?php
error_reporting(0);
require 'index.php';
$query = "SELECT * FROM `room` WHERE Status = 'available' ORDER BY
Room_number desc";
$response["sucsess"] = false;
$result = mysqli_query($conn, $query);
while($row = mysqli_fetch_assoc($result)){
$response["success"] = true;
$data[] = $row;
}
echo json_encode($data);
?>
MySingleton 代码
public class MySingleton {
private static MySingleton mInstance;
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static Context mCtx;
private MySingleton(Context context) {
mCtx = context;
mRequestQueue = getRequestQueue();
mImageLoader = new ImageLoader(mRequestQueue,
new ImageLoader.ImageCache() {
private final LruCache<String, Bitmap>
cache = new LruCache<String, Bitmap>(20);
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
});
}
public static synchronized MySingleton getInstance(Context context) {
if (mInstance == null) {
mInstance = new MySingleton(context);
}
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue =
Volley.newRequestQueue(mCtx.getApplicationContext());
}
return mRequestQueue;
}
public <T> void addToRequestQueue(Request<T> req) {
getRequestQueue().add(req);
}
public ImageLoader getImageLoader() {
return mImageLoader;
}
}
运行时出现错误
09-03 07:45:34.436 6020-6020/fyp.hotelreservationsystemver2 E/RecyclerView:未连接适配器;跳过布局 09-03 07:45:34.465 6020-6020/fyp.hotelreservationsystemver2 D/ReservationMainActivity: [{"Room_number":"1","Type":"luxury","Capacity":"10","Status":"可用","价格":"1000","图片":"img/hotel-bedroom-decor-hotel-style-bedrooms.jpg"}]/* * 要更改此许可标头,请在项目属性中选择许可标头。 * 要更改此模板文件,请选择工具 |模板 * 并在编辑器中打开模板。 */ 09-03 07:45:34.504 6020-6020/fyp.hotelreservationsystemver2 D/AndroidRuntime: 关闭虚拟机 09-03 07:45:34.504 6020-6020/fyp.hotelreservationsystemver2 E/AndroidRuntime: 致命异常: main 进程:fyp.hotelreservationsystemver2,PID:6020 com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: 使用 JsonReader.setLenient(true) 在第 2 行第 151 列接受格式错误的 JSON 在 com.google.gson.Gson.assertFullConsumption(Gson.java:779) 在 com.google.gson.Gson.fromJson(Gson.java:769) 在 com.google.gson.Gson.fromJson(Gson.java:717) 在 com.kosalgeek.android.json.JsonConverter.toArrayList(JsonConverter.java:42) 在 fyp.hotelreservationsystemver2.Reservation_main$1.onResponse(Reservation_main.java:53) 在 fyp.hotelreservationsystemver2.Reservation_main$1.onResponse(Reservation_main.java:44) 在 com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60) 在 com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30) 在 com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6077) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 引起:com.google.gson.stream.MalformedJsonException:使用 JsonReader.setLenient(true) 在第 2 行第 151 列接受格式错误的 JSON 在 com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1505) 在 com.google.gson.stream.JsonReader.checkLenient(JsonReader.java:1386) 在 com.google.gson.stream.JsonReader.nextNonWhitespace(JsonReader.java:1336) 在 com.google.gson.stream.JsonReader.doPeek(JsonReader.java:527) 在 com.google.gson.stream.JsonReader.peek(JsonReader.java:414) 在 com.google.gson.Gson.assertFullConsumption(Gson.java:775) 在 com.google.gson.Gson.fromJson(Gson.java:769) 在 com.google.gson.Gson.fromJson(Gson.java:717) 在 com.kosalgeek.android.json.JsonConverter.toArrayList(JsonConverter.java:42) 在 fyp.hotelreservationsystemver2.Reservation_main$1.onResponse(Reservation_main.java:53) 在 fyp.hotelreservationsystemver2.Reservation_main$1.onResponse(Reservation_main.java:44) 在 com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60) 在 com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30) 在 com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6077) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
我使用的 gson 和 JSON 转换器:
[1]: https://drive.google.com/open?id=0B9c7Ta0Lo2OVVkkyU1RJVzQ5bTQ
【问题讨论】:
-
发布你的 json 字符串
-
我建议 1) 打开 Web 浏览器并转到 room.php 页面 2) 将响应设置为仅 TextView 并查看它。如果它看起来像 JSON,则解析它