8

ADT (Linux Fedora17 の Eclipse 3.8.0) で Android エミュレーター (Nexus7) を使用して、Android で MqttClient を作成しようとしています問題。

プレゼンス ファイルを保存するディレクトリにユーザーが入ることができるアクティビティを作成しましたが、例外のキャッチを回避する方法がありません。「/mnt/sdcard/」、「/mnt/」、「/mnt/sdcard/tmp/」などで試しました。

Eclipse プロジェクトの Android エミュレーターの特定の設定に注意を払う必要がありますか? アプリケーションに含まれる使用許可はありますか?

引用された回答済みの質問に記載されているさまざまな mqtt リソースを調べましたが、回答を見つけることができませんでした。

これは私のコードです:

package com.storassa.android.mqttsample;

import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttDefaultFilePersistence;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.TextView;

public class MqttSample extends Activity {

    Button okButton = null;
    AutoCompleteTextView inputTextView = null;
    TextView errorTextView = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mqtt_sample);

        okButton = (Button)findViewById(R.id.okButton);
        inputTextView = (AutoCompleteTextView)findViewById(R.id.InputText);
        errorTextView = (TextView)findViewById(R.id.errorText);

        okButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                try {
                    String dir = inputTextView.getText().toString();
                    MqttDefaultFilePersistence mdfp = new MqttDefaultFilePersistence(
                            dir);
                    MqttClient client = new MqttClient("tcp://127.0.0.1:1833",
                            "0001", mdfp);
                }
                catch (Exception e) {
                    String errorText = "";
                    for (StackTraceElement error : e.getStackTrace())
                        errorText += error.toString() + "\n";
                    errorTextView.setText(errorText);
                }
            }
        });


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_mqtt_sample, menu);
        return true;
    }

}

そしてこれはスタックです:

MqttException(0) at
org.eclipse.paho.client.mqttv3.MqttDefaultFilePersistence.open(MqttDefaultFilePersistence.java:74)
org.eclipse.paho.client.mqttv3.MqttClient.<init>(MqttClient.java:183)
com.storassa.android.mqttsample.MqttSample$1.onClick(MqttSample.java:38)
android.view.View.performClick(View.java:4202)
android.view.View$PerformClick.run(View.java:17340)
android.os.Handler.handleCallback(Handler.java:725)
android.os.Handler.dispatchMessage(Handler.java:92)
android.os.Looper.loop(Looper.java:137)
android.app.ActivityThread.main(ActivityThread.java:5039)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:511)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
dalvik.system.NativeStart.main(Native Method)    
4

5 に答える 5

10

ファイルの永続性に依存しない場合は、代わりにクラス MemoryPersistence のインスタンスを使用できます。

したがって、クライアントを取得するための呼び出しは次のようになります。

MemoryPersistence persistence = new MemoryPersistence();
MqttClient client = new MqttClient(host, clientId, persistence);
于 2012-11-23T10:53:24.430 に答える
6

問題を理解し、それを見つけるためにどこかをグーグルで検索するのに丸一日を費やした後、最終的に私はそれを手に入れました:非常に単純に許可をマニフェストに追加する必要があります

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

SD カードの代わりに内部ディレクトリを使用できるかどうかはわかりません。

自分の質問に回答するのはこれが初めてなので、自分の回答に正解としてフラグを立てるのが良いエチケットかどうか教えてください(このトピックについてさまざまな意見が見つかりました)

于 2012-11-23T09:12:47.243 に答える
0
        MqttClientPersistence persistence = new MqttDefaultFilePersistence(mContext.getApplicationInfo().dataDir);
        mqttclient = new MqttAsyncClient(url.toString(), clientId, persistence);
于 2014-11-07T18:07:10.937 に答える
0

これで私の問題は解決しました。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

WAMPの周りにも少し嘲笑があります。

于 2014-04-17T02:37:33.953 に答える