Я хочу сделать кнопку загрузки файла в списке файлов с php-сервера.
Итак, я сделал форму просмотра списка и получил списки загруженных файлов с веб-сайта, подключенного к php, db.
Однако, когда я использую кнопку onclick listener в mainactivity.java, приложение закрывается.
И Logcat говорит, что онклисенсор неправильный.
Я думаю, поэтому я использую два URL для подключения к серверу.
Например, один URL для загруженных списков файлов и один для кнопки загрузки.
fido.xml - это форма списка.
В fido.xml есть кнопка и множество текстовых просмотров (заголовок файла, дата загрузки, кто опубликовал, а также содержимое и т. Д.)
И я также сделал FiDoListAdapter.java, FiDo.java, чтобы получить загруженный список файлов с сервера.
Кроме того, я разрешил использование интернета на манифесте.
открытый класс MainActivity расширяет AppCompatActivity {
Button button;
DownloadManager downloadManager;
private ListView fileListView;
private FiDoListAdapter adapter;
private List<FiDo> fiDoList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
downloadManager = (DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);
Uri uri = Uri.parse("http://****/*******/upload/201905/2019-05-16_01.56.54.png");
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
Long reference = downloadManager.enqueue(request);
}
});
fileListView = (ListView)findViewById(R.id.fileListView);
fiDoList = new ArrayList<FiDo>();
adapter = new FiDoListAdapter(getApplicationContext(), fiDoList);
fileListView.setAdapter(adapter);
new BackgroundTask().execute();
}
class BackgroundTask extends AsyncTask<Void, Void, String> {
String target;
@Override
protected void onPreExecute(){
super.onPreExecute();
target = "http://*********.php";
}
@Override
protected String doInBackground(Void... voids) {
try{
URL url = new URL(target);
HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String temp;
StringBuilder stringBuilder = new StringBuilder();
while((temp = bufferedReader.readLine()) != null){
stringBuilder.append(temp + "\n");
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
return stringBuilder.toString().trim();
}
catch (Exception e){
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(Void... values){
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String result){
super.onPostExecute(result);
try{
JSONObject jsonObject = new JSONObject(result);
JSONArray jsonArray = jsonObject.getJSONArray("response");
int count = 0;
String title, content, a_id, date;
while(count < jsonArray.length()){
JSONObject object = jsonArray.getJSONObject(count);
title = object.getString("title");
content = object.getString("content");
a_id = object.getString("a_id");
date = object.getString("date");
FiDo notice = new FiDo(title, content, a_id, date);
fiDoList.add(notice);
adapter.notifyDataSetChanged();
count++;
}
}
catch (Exception e){
e.printStackTrace();
}
}
}
}
это logcat.
--------- начало аварии
2019-05-17 18: 46: 02.603 21303-21303 / com.example.postdown E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное
Процесс: com.example.postdown, PID: 21303
java.lang.RuntimeException: не удается запустить действие ComponentInfo {com.example.postdown / com.example.postdown.MainActivity}: java.lang.NullPointerException: попытка вызвать виртуальный метод void android.widget.Button.setOnClickListener (android. view.View $ OnClickListener) 'для пустой ссылки на объект
на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2927)
на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2988)
на android.app.ActivityThread.-wrap14 (ActivityThread.java)
на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1631)
на android.os.Handler.dispatchMessage (Handler.java:102)
на android.os.Looper.loop (Looper.java:154)
на android.app.ActivityThread.main (ActivityThread.java:6682)
в java.lang.reflect.Method.invoke (родной метод)
на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1520)
на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1410)
Вызывается: java.lang.NullPointerException: попытка вызвать виртуальный метод «void android.widget.Button.setOnClickListener (android.view.View $ OnClickListener)» для ссылки на пустой объект
в com.example.postdown.MainActivity.onCreate (MainActivity.java:38)
на android.app.Activity.performCreate (Activity.java:6942)
на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1126)
на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2880)
на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2988)
на android.app.ActivityThread.-wrap14 (ActivityThread.java)
на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1631)
на android.os.Handler.dispatchMessage (Handler.java:102)
на android.os.Looper.loop (Looper.java:154)
на android.app.ActivityThread.main (ActivityThread.java:6682)
в java.lang.reflect.Method.invoke (родной метод)
на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1520)
на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1410)