Php 使用Android Studio在回收器视图中显示mysql中的图像时出错

Php 使用Android Studio在回收器视图中显示mysql中的图像时出错,php,android,image,nullpointerexception,android-recyclerview,Php,Android,Image,Nullpointerexception,Android Recyclerview,我想在RecyclerView中显示来自mysql的图像。我已经存储了数据库的路径。应用程序将通过从数据库获取图像的url来检索图像。应用程序在运行时崩溃。我真的不知道哪里出了问题。 我在运行应用程序时遇到此错误。我需要帮助和指导。请帮帮我 12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime: FATAL EXCEPTION: main 12-23 08:31:04.822 26595-26595/bhouse.tr

我想在RecyclerView中显示来自mysql的图像。我已经存储了数据库的路径。应用程序将通过从数据库获取图像的url来检索图像。应用程序在运行时崩溃。我真的不知道哪里出了问题。 我在运行应用程序时遇到此错误。我需要帮助和指导。请帮帮我

12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime: FATAL EXCEPTION: main
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime: Process: bhouse.travellist, PID: 26595
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:     at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:     at org.json.JSONTokener.nextValue(JSONTokener.java:94)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:     at org.json.JSONObject.<init>(JSONObject.java:156)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:     at org.json.JSONObject.<init>(JSONObject.java:173)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:     at bhouse.travellist.MainActivity.showList(MainActivity.java:66)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:     at bhouse.travellist.MainActivity$1GetURLs.onPostExecute(MainActivity.java:106)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:     at bhouse.travellist.MainActivity$1GetURLs.onPostExecute(MainActivity.java:92)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:     at android.os.AsyncTask.finish(AsyncTask.java:632)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:     at android.os.AsyncTask.access$600(AsyncTask.java:177)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:135)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5221)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:致命异常:main
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:Process:bhouse.travellist,PID:26595
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“int java.lang.String.length()”
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:org.json.JSONTokener.nextValue(JSONTokener.java:94)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:org.json.JSONObject.(JSONObject.java:156)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:org.json.JSONObject.(JSONObject.java:173)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:at bhouse.travellist.MainActivity.showList(MainActivity.java:66)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:at bhouse.travellist.MainActivity$1GetURLs.onPostExecute(MainActivity.java:106)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:at bhouse.travellist.MainActivity$1GetURLs.onPostExecute(MainActivity.java:92)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:at-android.os.AsyncTask.finish(AsyncTask.java:632)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:at-android.os.AsyncTask.access$600(AsyncTask.java:177)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:at-android.os.Handler.dispatchMessage(Handler.java:102)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:at-android.os.Looper.loop(Looper.java:135)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:at-android.app.ActivityThread.main(ActivityThread.java:5221)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:at java.lang.reflect.Method.invoke(本机方法)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:at java.lang.reflect.Method.invoke(Method.java:372)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
12-23 08:31:04.822 26595-26595/bhouse.travellist E/AndroidRuntime:com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
MainActivity.java

public class MainActivity extends Activity {

  private Toolbar toolbar;

  private RecyclerView mRecyclerView;
  private StaggeredGridLayoutManager mStaggeredLayoutManager;
  private TravelListAdapter mAdapter;
  private boolean isListView;
  private Menu menu;
    String myJSON;
    JSONArray images = null;
    private static final String TAG_RESULTS="result";
    private final ArrayList<images> pairs = new ArrayList<images>();
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setUpActionBar();

    mStaggeredLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);

    mRecyclerView = (RecyclerView) findViewById(R.id.list);
    mRecyclerView.setLayoutManager(mStaggeredLayoutManager);

    mRecyclerView.setHasFixedSize(true); //Data size is fixed - improves performance

      getData();
  }
    protected void showList(String json){
        try {
            JSONObject jsonObj = new JSONObject(json);
            images = jsonObj.getJSONArray(TAG_RESULTS);

            for(int i=0;i<images.length();i++){
                JSONObject c = images.getJSONObject(i);

                String name = c.getString("name");
                String url= c.getString("url");

                pairs.add(new images( name , url ));


            }

            mAdapter = new TravelListAdapter(MainActivity.this,pairs);
            mRecyclerView.setAdapter(mAdapter);

        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

    private void getData() {
        class GetURLs extends AsyncTask<String,Void,String> {
            ProgressDialog loading;

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                loading = ProgressDialog.show(MainActivity.this,"Loading...","Please Wait...",true,true);
            }

            @Override
            protected void onPostExecute(String result) {
                super.onPostExecute(result);
                loading.dismiss();
                showList(result);
            }

            @Override
            protected String doInBackground(String... params) {
                DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
                HttpPost httppost = new HttpPost("http://192.168.1.10/VideoUpload/getAllImages.php");

                // Depends on your web service
                httppost.setHeader("Content-type", "application/json");

                InputStream inputStream = null;
                String result = null;
                try {
                    HttpResponse response = httpclient.execute(httppost);
                    HttpEntity entity = response.getEntity();

                    inputStream = entity.getContent();
                    // json is UTF-8 by default
                    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
                    StringBuilder sb = new StringBuilder();

                    String line = null;
                    while ((line = reader.readLine()) != null)
                    {
                        sb.append(line + "\n");
                    }
                    result = sb.toString();
                } catch (Exception e) {
                    // Oops
                }
                finally {
                    try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
                }
                return result;
            }
        }
        GetURLs gu = new GetURLs();
        gu.execute();
    }

  private void setUpActionBar() {
    if (toolbar != null) {
      setActionBar(toolbar);
      getActionBar().setDisplayHomeAsUpEnabled(false);
      getActionBar().setDisplayShowTitleEnabled(true);
      getActionBar().setElevation(7);
    }
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_main, menu);
    this.menu = menu;
    return true;
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_toggle) {
      toggle();
      return true;
    }
    return super.onOptionsItemSelected(item);
  }

  private void toggle() {
    MenuItem item = menu.findItem(R.id.action_toggle);
    if (isListView) {
      mStaggeredLayoutManager.setSpanCount(2);
      item.setIcon(R.drawable.ic_action_list);
      item.setTitle("Show as list");
      isListView = false;
    } else {
      mStaggeredLayoutManager.setSpanCount(1);
      item.setIcon(R.drawable.ic_action_grid);
      item.setTitle("Show as grid");
      isListView = true;
    }
  }
}
公共类MainActivity扩展活动{
专用工具栏;
私人回收视图mRecyclerView;
私人助理经理mStaggeredLayoutManager;
私人旅行社;
私有布尔isListView;
私人菜单;
字符串myJSON;
JSONArray图像=null;
私有静态最终字符串标记_RESULTS=“result”;
私有最终ArrayList对=新ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar=(toolbar)findviewbyd(R.id.toolbar);
setUpActionBar();
mStaggeredLayoutManager=新的StaggedGridLayoutManager(1,StaggedGridLayoutManager.VERTICAL);
mRecyclerView=(RecyclerView)findViewById(R.id.list);
mRecyclerView.setLayoutManager(mStaggeredLayoutManager);
mRecyclerView.setHasFixedSize(true);//数据大小是固定的-提高了性能
getData();
}
受保护的无效显示列表(字符串json){
试一试{
JSONObject jsonObj=新的JSONObject(json);
images=jsonObj.getJSONArray(标记结果);
对于(int i=0;i

for(int i=0;i@Sree结果=sb.toString();shows null..但它在列表视图中工作正常。我使用的是相同的方法。我可以知道我应该在哪里更改吗?在列表视图中显示是什么意思?它在android列表视图中显示吗?@Sree Ya…当我在列表视图中应用相同的方法时,它工作正常..我想将更改为RecyclerView..但当我在RecyclerV中应用代码时它崩溃了查看..我能知道我哪里做错了吗?您是否在代码中获得了json值???
for(inti=0;i@Sree结果=sb.toString();shows null..但它在列表视图中工作正常。我使用的是相同的方法。我可以知道我应该在哪里更改吗?在列表视图中显示是什么意思?它在android列表视图中显示吗?@Sree Ya…当我在列表视图中应用相同的方法时,它工作正常..我想将更改为RecyclerView..但当我在RecyclerV中应用代码时它崩溃了我能知道我哪里做错了吗?
public class TravelListAdapter extends RecyclerView.Adapter<TravelListAdapter.ViewHolder> {

  Context mContext;
  OnItemClickListener mItemClickListener;

  private ArrayList<images> pairs;

  public TravelListAdapter(Context context ,ArrayList<images> pairs ) {
    this.mContext = context;
    this.pairs = pairs;
  }

  @Override
  public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_places, parent, false);
    return new ViewHolder(view);
  }

  @Override
  public void onBindViewHolder(final ViewHolder holder, final int position) {

    holder.placeName.setText(pairs.get(position).name);
    Picasso.with(mContext).
            load(pairs.get(position).url).
            into(holder.placeImage);

    Bitmap photo =getBitmapFromURL(pairs.get(position).url);

    Palette.generateAsync(photo, new Palette.PaletteAsyncListener() {
      public void onGenerated(Palette palette) {
        int mutedLight = palette.getMutedColor(mContext.getResources().getColor(android.R.color.black));
        holder.placeNameHolder.setBackgroundColor(mutedLight);
      }
    });
  }

  public static Bitmap getBitmapFromURL(String src) {
    try {
      URL url = new URL(src);
      HttpURLConnection connection = (HttpURLConnection) url.openConnection();
      connection.setDoInput(true);
      connection.connect();
      InputStream input = connection.getInputStream();
      Bitmap myBitmap = BitmapFactory.decodeStream(input);
      return myBitmap;
    } catch (IOException e) {
      // Log exception
      return null;
    }
  }
  @Override
  public int getItemCount() {
    return pairs.size();
  }

  public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    public LinearLayout placeHolder;
    public LinearLayout placeNameHolder;
    public TextView placeName;
    public ImageView placeImage;

    public ViewHolder(View itemView) {
      super(itemView);
      placeHolder = (LinearLayout) itemView.findViewById(R.id.mainHolder);
      placeName = (TextView) itemView.findViewById(R.id.placeName);
      placeNameHolder = (LinearLayout) itemView.findViewById(R.id.placeNameHolder);
      placeImage = (ImageView) itemView.findViewById(R.id.placeImage);
      placeHolder.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
      if (mItemClickListener != null) {
        mItemClickListener.onItemClick(itemView, getPosition());
      }
    }
  }

  public interface OnItemClickListener {
    void onItemClick(View view, int position);
  }

  public void setOnItemClickListener(final OnItemClickListener mItemClickListener) {
    this.mItemClickListener = mItemClickListener;
  }

}
<?php
    require_once('dbConnect.php');

    $sql = "select * from uploads where id=52";

    $res = mysqli_query($con,$sql);

    $result = array();

    while($row = mysqli_fetch_array($res)){
        array_push($result,array(
        'url'=>$row['image'],
        'name'=>$row['name']
        ));
    }

    echo json_encode(array("result"=>$result));

    mysqli_close($con);
?>