Toastについて

137 views
Skip to first unread message

後醍院良護

unread,
Dec 17, 2013, 4:06:42 AM12/17/13
to android-g...@googlegroups.com
Toastでエラーが出てしまい、躓いています。
下記のようなソースコードなのですが何がいけないのでしょう?
エラーログと一緒に載せておきます。

public class TweetDialog extends DialogFragment {

private Twitter mTwitter;
private EditText editText;


@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// TODO 自動生成されたメソッド・スタブ
AlertDialog.Builder d = new AlertDialog.Builder(getActivity());

editText = new EditText(getActivity());

d.setMessage("message");
d.setView(editText);
d.setTitle("title");
d.setPositiveButton("Tweet", new OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO 自動生成されたメソッド・スタブ

tweet();

}
});

d.setNegativeButton("Cancel", new OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO 自動生成されたメソッド・スタブ

}
});

return d.create();
}

public void tweet() {
mTwitter = TwitterUtils.getTwitterInstance(getActivity());
AsyncTask<String, Void, Boolean> task = new AsyncTask<String, Void, Boolean>() {
@Override
protected Boolean doInBackground(String... params) {
try {
mTwitter.updateStatus(params[0]);
return true;
} catch (TwitterException e) {
e.printStackTrace();
return false;
}
}

@Override
protected void onPostExecute(Boolean result) {
if (result) {
showToast("ツイートが完了しました!");
} else {

showToast("ツイートに失敗しました。。。");
}
}
};
task.execute(editText.getText().toString());

}

public void showToast(final String text) {
Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT).show();

12-17 18:04:06.509: E/AndroidRuntime(20083): FATAL EXCEPTION: main
12-17 18:04:06.509: E/AndroidRuntime(20083): java.lang.NullPointerException
12-17 18:04:06.509: E/AndroidRuntime(20083): at android.widget.Toast.<init>(Toast.java:92)
12-17 18:04:06.509: E/AndroidRuntime(20083): at android.widget.Toast.makeText(Toast.java:238)
12-17 18:04:06.509: E/AndroidRuntime(20083): at com.example.parakeet.TweetDialog.showToast(TweetDialog.java:91)
12-17 18:04:06.509: E/AndroidRuntime(20083): at com.example.parakeet.TweetDialog$3.onPostExecute(TweetDialog.java:76)
12-17 18:04:06.509: E/AndroidRuntime(20083): at com.example.parakeet.TweetDialog$3.onPostExecute(TweetDialog.java:1)
12-17 18:04:06.509: E/AndroidRuntime(20083): at android.os.AsyncTask.finish(AsyncTask.java:631)
12-17 18:04:06.509: E/AndroidRuntime(20083): at android.os.AsyncTask.access$600(AsyncTask.java:177)
12-17 18:04:06.509: E/AndroidRuntime(20083): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
12-17 18:04:06.509: E/AndroidRuntime(20083): at android.os.Handler.dispatchMessage(Handler.java:99)
12-17 18:04:06.509: E/AndroidRuntime(20083): at android.os.Looper.loop(Looper.java:213)
12-17 18:04:06.509: E/AndroidRuntime(20083): at android.app.ActivityThread.main(ActivityThread.java:5092)
12-17 18:04:06.509: E/AndroidRuntime(20083): at java.lang.reflect.Method.invokeNative(Native Method)
12-17 18:04:06.509: E/AndroidRuntime(20083): at java.lang.reflect.Method.invoke(Method.java:511)
12-17 18:04:06.509: E/AndroidRuntime(20083): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
12-17 18:04:06.509: E/AndroidRuntime(20083): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:564)
12-17 18:04:06.509: E/AndroidRuntime(20083): at dalvik.system.NativeStart.main(Native Method)
nullが発生する原因がいまいちよくわかりません......

Kuchinashi

unread,
Dec 17, 2013, 4:46:25 AM12/17/13
to android-g...@googlegroups.com
Kuchinashiです.

ダイアログのボタンをクリックした際にダイアログが閉じてしまっていませんか?
ダイアログが閉じると,DialogFragmentがActivityから離れるため,getActivity()でActivityを取得できなくなります.
Toast表示に用いるContextは予め取得しておいたApplicationContextを渡せば落ちなくなると思います.

2013年12月17日火曜日 18時06分42秒 UTC+9 後醍院良護:

Makoto Yamazaki

unread,
Dec 17, 2013, 4:52:24 AM12/17/13
to android-g...@googlegroups.com
zaki です。

Activity と ApplicationContext はどちらも Context ですが、テーマをまじめに使っている
場合など、どちらを使うかで見た目が変わったりします。

今回の場合だと、ダイアログ側にtweet の機能を実装するのではなく、ダイアログはテキストを
取得する機能にとどめ、tweetの送信は呼び出し側の Fragment なり Activity にもたせるという
設計もありかなと思いました。


2013/12/17 Kuchinashi <yuta.t...@gmail.com>

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com にメールを送信します。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。



--
YAMAZAKI Makoto

後醍院良護

unread,
Dec 17, 2013, 7:48:44 AM12/17/13
to android-g...@googlegroups.com
回答ありがとうございます。
ご指摘いただいた通りに直したら無事動作しました。

2013年12月17日火曜日 18時06分42秒 UTC+9 後醍院良護:
Reply all
Reply to author
Forward
0 new messages