Php 使用Android Studio在回收器视图中显示mysql中的图像时出错
我想在RecyclerView中显示来自mysql的图像。我已经存储了数据库的路径。应用程序将通过从数据库获取图像的url来检索图像。应用程序在运行时崩溃。我真的不知道哪里出了问题。 我在运行应用程序时遇到此错误。我需要帮助和指导。请帮帮我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
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);
?>