Android - ошибка NullPointerException

Я работаю над связью через Интернет. От устройства Android (клиент) на ПК (сервер) на основе Linux. Мне удалось подключить websocket к серверу. Но проблема в том, что я получил ошибку при отправке данных (строковое значение)

Существует вид на карусель с четырьмя продуктами. Поэтому, когда я нажимаю на фотографию продукта0, я устанавливаю строку как "продукт0" и отправляю это значение строки на сервер. Я использую библиотеку Autobahn.

Код здесь

import de.tavendo.autobahn.WebSocketConnection;

public class Myoffers_Fragment extends Fragment {

    private static final String TAG = "Philips";
    private final WebSocketConnection mConnection = new WebSocketConnection();

    public static Fragment newInstance(Myoffers context, int pos, float scale)
    {
        Bundle b = new Bundle();
        b.putInt("pos", pos);
        b.putFloat("scale", scale);
        return Fragment.instantiate(context, Myoffers_Fragment.class.getName(), b);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        if (container == null) {
            return null;
        }

        LinearLayout l = (LinearLayout) inflater.inflate(R.layout.mf, container, false);

        int pos = this.getArguments().getInt("pos");
        TextView tv = (TextView) l.findViewById(R.id.text);
        tv.setText("Product " + pos);



        ImageButton product_photo = (ImageButton) l.findViewById(R.id.myoffer_image);


        if (pos == 0) {
            product_photo.setImageResource(R.drawable.myoffers_0);
            product_photo.setOnClickListener(new ImageButton.OnClickListener(){
                public void onClick(View v){
                    String id1 = "Product0";
                    Log.d(TAG, "Current product is : " + id1);
                    mConnection.sendTextMessage(id1);
                    Log.d(TAG, id1 + "is sent to server!");
                }
            });
        }

Возможно ли, что "extends Fragment" делает ошибку?.. Ошибка произошла, как показано ниже..

06-19 12:02:01.310: E/AndroidRuntime(2712): FATAL EXCEPTION: main
06-19 12:02:01.310: E/AndroidRuntime(2712): java.lang.NullPointerException
06-19 12:02:01.310: E/AndroidRuntime(2712):     at de.tavendo.autobahn.WebSocketConnection.sendTextMessage(WebSocketConnection.java:137)
06-19 12:02:01.310: E/AndroidRuntime(2712):     at com.example.philips.Myoffers_Fragment$1.onClick(Myoffers_Fragment.java:56)
06-19 12:02:01.310: E/AndroidRuntime(2712):     at android.view.View.performClick(View.java:3511)
06-19 12:02:01.310: E/AndroidRuntime(2712):     at android.view.View$PerformClick.run(View.java:14105)
06-19 12:02:01.310: E/AndroidRuntime(2712):     at android.os.Handler.handleCallback(Handler.java:605)
06-19 12:02:01.310: E/AndroidRuntime(2712):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-19 12:02:01.310: E/AndroidRuntime(2712):     at android.os.Looper.loop(Looper.java:137)
06-19 12:02:01.310: E/AndroidRuntime(2712):     at android.app.ActivityThread.main(ActivityThread.java:4446)
06-19 12:02:01.310: E/AndroidRuntime(2712):     at java.lang.reflect.Method.invokeNative(Native Method)
06-19 12:02:01.310: E/AndroidRuntime(2712):     at java.lang.reflect.Method.invoke(Method.java:511)
06-19 12:02:01.310: E/AndroidRuntime(2712):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-19 12:02:01.310: E/AndroidRuntime(2712):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-19 12:02:01.310: E/AndroidRuntime(2712):     at dalvik.system.NativeStart.main(Native Method)

Произошла ошибка, когда я щелкаю фотографию, чтобы отправить строковое значение.

1 ответ

Ошибка происходит в вашем onClick Вот:

mConnection.sendTextMessage(id1);

Похоже, вы заявили mConnection вверху, но не сделано никаких связей.

Глядя на документы, нужно позвонить .connect() на ваше mConnection перед его использованием.

Линия 137 из WebSocketConnection.java является:

public void sendTextMessage(String payload) {
    mWriter.forward(new WebSocketMessage.TextMessage(payload));
}

mWriter является нулевым, пока вы не позвоните .connect(), Исходный код

Итак, убедитесь, что у вас есть действующее соединение (позвонив по .connect()), прежде чем использовать mConnection объект.

Другие вопросы по тегам