кнопка загрузки файла в списке - PullRequest
0 голосов
/ 17 мая 2019

Я хочу сделать кнопку загрузки файла в списке файлов с 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)

...