【发布时间】:2017-04-04 12:57:55
【问题描述】:
我正在尝试下载我上传到 Firebase 存储的 JSON 文件。我尝试了一些方法,但没有任何效果。
在代码中,null 总是由这个 doInBackground() 方法返回,它无法进一步处理我的应用程序。
protected String doInBackground(String... strings) {
Log.e("Test", "DOINBG Working..");
String storageUrl = "https://firebasestorage.googleapis.com/v0/b/frost-bird-1d290." +
"appspot.com/o/images.json?alt=media&token=b0a511d4-f0ea-4ee0-a063-69b7fd050f49";
FirebaseStorage firebaseStorage = FirebaseStorage.getInstance();
StorageReference reference = firebaseStorage.getReferenceFromUrl(storageUrl);
final File localFile;
try {
localFile = File.createTempFile("images", "json");
reference.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
Toast.makeText(getContext(), "File downloaded successfully.", Toast.LENGTH_SHORT).show();
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(localFile)));
StringBuilder result = new StringBuilder();
String line = null;
while((line.concat(String.valueOf(reader.read()))) != null){
Log.e("Test", "Result - "+ result);
result.append(line);
}
finalRes.concat(result.toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e("Test", "Failed");
Toast.makeText(getContext(), "File downloading failed.", Toast.LENGTH_LONG).show();
}
});
} catch (IOException e) {
e.printStackTrace();
}
Log.e("Test", "String Downloaded- "+finalRes);
return finalRes;
}
protected void onPostExecute(String result) {
Log.e("Test", "onPostExecute Working.."+"\nString in onPostExecute Method-" +result);
progressDialog.dismiss();
List<String> data = new ArrayList<>();
progressDialog.dismiss();
try{
JSONArray jsonArray = new JSONArray(result);
for(int i=0;i<jsonArray.length();i++){
JSONObject jObject = jsonArray.getJSONObject(i);
data.add(jObject.getString("ipl_image"));
}
recyclerViewGallery = (RecyclerView) getView().findViewById(R.id.recyclerviewgallery);
adapter = new GalleryPhotoAdapter(getContext());
recyclerViewGallery.setAdapter(adapter);
recyclerViewGallery.setLayoutManager(new LinearLayoutManager(getContext()));
}
catch (JSONException e){
Toast.makeText(getContext(),e.toString(), Toast.LENGTH_LONG).show();
}
}
另外我想告诉你,它从不执行onSuccess() 方法。我不知道为什么。
错误日志:
FATAL EXCEPTION: main Process: com.metrowebz.data.ipl2017, PID: 9526
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
at org.json.JSONTokener.nextValue(JSONTokener.java:94)
at org.json.JSONArray.<init>(JSONArray.java:92)
at org.json.JSONArray.<init>(JSONArray.java:108)
at com.metrowebz.data.ipl2017.NavDFragments.GalleryFragment$AsyncFetch.onPostExecute(GalleryFragment.java:126)
at com.metrowebz.data.ipl2017.NavDFragments.GalleryFragment$AsyncFetch.onPostExecute(GalleryFragment.java:61)
at android.os.AsyncTask.finish(AsyncTask.java:651)
谁能帮我解决这个问题?
【问题讨论】:
-
发布您的错误日志。
-
您真的需要以编程方式执行此操作吗?
-
您还有什么建议吗?
-
我还上传了 onPostExecute() 代码@DougStevenson。但我认为,它在那里显示错误,因为它正在获取从 doInBackground() 方法传递的空字符串......
-
此日志打印什么? Log.e("Test", "String Downloaded-"+finalRes);
标签: android json firebase firebase-storage