簡體   English   中英

執行 textView 命令時應用程序崩潰

[英]App crashes while executing the textView command

我的 android 應用程序應該通過 sockets 將圖像發送到本地 java 服務器,並且在處理圖像后,結果必須再次發送到應用程序,我已經成功接收到文本視圖,但我已經成功地收到了應該顯示的結果。當我嘗試在文本視圖中顯示結果時,應用程序崩潰並顯示以下錯誤。

Error: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.text.BreakIterator.setText(java.lang.String)' on a null object reference

我是 Android 編程的新手。我嘗試了很多事情但無法解決。請幫助我! 提前致謝!

代碼:主要活動

package com.example.image1;

import android.app.Activity;
import android.app.MediaRouteButton;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Base64;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.Nullable;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.BreakIterator;
import java.util.Objects;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */

    private static final int SELECT_PICTURE = 1;
    private static final int GET_PICTURE =1 ;
    private PrintWriter printwriter;
    public static String selectedImagePath;
    public static String selectedImageUri;
    private ImageView img;
    public static  String st;
    TextView status1;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        System.out.println("34");
        img = (ImageView) findViewById(R.id.ivPic);
        System.out.println("36");
        Button send = (Button) findViewById(R.id.bSend);
        //status = (TextView) findViewById(R.id.tvStatus);
        status1 = (TextView) findViewById(R.id.result);
        ((Button) findViewById(R.id.bBrowse))
                .setOnClickListener(new View.OnClickListener() {
                    public void onClick(View arg0) {
                        System.out.println("40");
                        Intent intent = new Intent();
                        intent.setType("image/*");
                        intent.setAction(Intent.ACTION_GET_CONTENT);
                        startActivityForResult(
                                Intent.createChooser(intent, "Select Picture"),
                                SELECT_PICTURE);
                        System.out.println("47");
                    }
                });
        ;
        System.out.println("51");

        //status1.setText("fjfjf");
        send.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                //status1.setText("fjfjf");
                new SendImageTask().execute();

                //final TextView status1 = (TextView) findViewById(R.id.result);
                //status1.setText(s);
            }
        });
    }
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (requestCode == SELECT_PICTURE) {
                Uri selectedImageUri = data.getData();
                selectedImagePath = getPath(selectedImageUri);
               TextView path = (TextView) findViewById(R.id.tvPath);
               path.setText("Image Path : " + selectedImagePath);
               img.setImageURI(selectedImageUri);
           }
       }
    }



    public String getPath(Uri uri) {
        String[] projection = {MediaStore.Images.Media.DATA};
        Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        int columnIndex = cursor.getColumnIndex(projection[0]);
        String filePath = cursor.getString(columnIndex);
        cursor.close();
        return filePath;
    }


}


        SendImageTask code

package com.example.image1;

import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Base64;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import java.text.BreakIterator;

class SendImageTask extends AsyncTask<Void, Void, String> {

    private PrintWriter printwriter;
    private Bitmap IOUtils;
    private BreakIterator status1;
    private static String st;



    @SuppressLint("WrongThread")
    @Override
    protected String doInBackground(Void... voids) {
        Socket sock;
        try {

            sock = new Socket("192.168.43.120", 8000);
            System.out.println("Connecting...");


            System.out.println("Sending...");

            String s = getFileToByte(MainActivity.selectedImagePath);
            System.out.println(s);

            printwriter = new PrintWriter(sock.getOutputStream(), true);
            printwriter.write(String.valueOf(s)); // write the message to output stream
            printwriter.flush();
            printwriter.close();


            sock.close();

            try {
                System.out.println("Another socket");
                Socket sock1 = new Socket("192.168.43.120", 6000);
                System.out.println("Connecting1...");

                InputStreamReader streamReader = new InputStreamReader(sock1.getInputStream());
                BufferedReader reader = new BufferedReader(streamReader);
                st = reader.readLine();
                System.out.println(st);
                System.out.println("ascscasc");

                sock1.close();
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return st;
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return st;
    }
    protected  void onPostExecute(String st){
        System.out.println("asasdcwdcwdc");
        System.out.println(st);
        status1.setText(String.valueOf(st));
    }
    public static String getFileToByte(String filePath){
        Bitmap bmp = null;
        ByteArrayOutputStream bos = null;
        byte[] bt = null;
        String encodeString = null;
        try{
            bmp = BitmapFactory.decodeFile(filePath);
            bos = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.PNG, 100, bos);
            bt = bos.toByteArray();
            encodeString = Base64.encodeToString(bt, Base64.DEFAULT);
        }
        catch (Exception e){
            e.printStackTrace();
        }
        String str1=encodeString.replaceAll("[\r\n]+", " ");
        str1 = str1.replaceAll("\\s+","");
        return "data:image/jpeg;base64,"+str1+"/n";
    }

}

首先,我的應用程序崩潰了,因為我在 doInBackground 方法中執行 textView 操作,然后我才知道無法在那里完成 ui 操作。 然后我在 onPostExecute 方法中執行了這些命令。但是我的應用程序仍然崩潰說 NullPointerException。我還將在此處包含 logcat。提前致謝。

日志貓:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.image1, PID: 20241
    java.lang.NullPointerException: Attempt to invoke virtual method 'void java.text.BreakIterator.setText(java.lang.String)' on a null object reference
        at com.example.image1.SendImageTask.onPostExecute(SendImageTask.java:147)
        at com.example.image1.SendImageTask.onPostExecute(SendImageTask.java:19)
        at android.os.AsyncTask.finish(AsyncTask.java:667)
        at android.os.AsyncTask.-wrap1(AsyncTask.java)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:684)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:186)
        at android.app.ActivityThread.main(ActivityThread.java:6509)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:914)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:804)
I/Process: Sending signal. PID: 20241 SIG: 9

你需要初始化你的BreakIterator object status1否則它將是 null。

我沒有使用過 BreakIterator,但快速查看文檔表明這是獲取實例的方式。

BreakIterator status1 = BreakIterator.getWordInstance();

底線是在使用它之前對其進行初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM