【发布时间】:2014-03-30 15:27:55
【问题描述】:
我正在尝试使用 Scala 制作 Android 应用程序。它应该发出 GET 请求。我看到了一些实现此功能的 Java 代码,但这对我没有多大帮助。那么,有人可以解释我如何做到这一点,或者给出一个代码示例吗? 现在我有:
protected override def onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
val intent: Intent = getIntent()
val massage: String = makeJson(intent.getExtras())
val url:String = """http://something.I.dont.want.to.show?info=""" + URLEncoder.encode(massage, "utf-8")
val req = new MyAsyncTask()
req.execute(url)
val data:JSONArray = req.get()
// Create the text view
val textView:TextView = new TextView(this)
textView.setTextSize(40)
textView.setText(data.toString())
// Set the text view as the activity layout
setContentView(textView)
}
还有 MyNewTask 类:
class MyAsyncTask extends AsyncTask[String, Void, JSONArray] {
override protected def doInBackground(arg0: String*): JSONArray = {
val httpclient: HttpClient = new DefaultHttpClient()
try {
val response: HttpResponse = httpclient.execute(new HttpGet(arg0(0)))
val statusLine: StatusLine = response.getStatusLine()
if(statusLine.getStatusCode() == HttpStatus.SC_OK){
val out:ByteArrayOutputStream = new ByteArrayOutputStream()
response.getEntity().writeTo(out)
out.close()
val responseString = out.toString()
new JSONArray(responseString)
}
else{
//Closes the connection.
response.getEntity().getContent().close()
throw new IOException(statusLine.getReasonPhrase())
null
}
}
catch {
case e: ClientProtocolException => {new JSONArray()}
case ioe: IOException => {new JSONArray()}
}
}
}
日志:
03-30 20:25:34.105: D/dalvikvm(30197): --- called into dvmAbstractMethodStub
03-30 20:25:34.105: D/AndroidRuntime(30197): Shutting down VM
03-30 20:25:34.105: W/dalvikvm(30197): threadid=1: thread exiting with uncaught exception (group=0x419d6930)
03-30 20:25:34.110: E/AndroidRuntime(30197): FATAL EXCEPTION: main
03-30 20:25:34.110: E/AndroidRuntime(30197): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myscalaandroidapp2/com.example.myscalaandroidapp2.DisplayMassageActivity}: java.util.concurrent.ExecutionException: java.lang.AbstractMethodError: abstract method not implemented
03-30 20:25:34.110: E/AndroidRuntime(30197): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2249)
03-30 20:25:34.110: E/AndroidRuntime(30197): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2299)
03-30 20:25:34.110: E/AndroidRuntime(30197): at android.app.ActivityThread.access$700(ActivityThread.java:154)
03-30 20:25:34.110: E/AndroidRuntime(30197): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284)
03-30 20:25:34.110: E/AndroidRuntime(30197): at android.os.Handler.dispatchMessage(Handler.java:99)
03-30 20:25:34.110: E/AndroidRuntime(30197): at android.os.Looper.loop(Looper.java:137)
03-30 20:25:34.110: E/AndroidRuntime(30197): at android.app.ActivityThread.main(ActivityThread.java:5306)
03-30 20:25:34.110: E/AndroidRuntime(30197): at java.lang.reflect.Method.invokeNative(Native Method)
03-30 20:25:34.110: E/AndroidRuntime(30197): at java.lang.reflect.Method.invoke(Method.java:511)
03-30 20:25:34.110: E/AndroidRuntime(30197): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
03-30 20:25:34.110: E/AndroidRuntime(30197): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
03-30 20:25:34.110: E/AndroidRuntime(30197): at dalvik.system.NativeStart.main(Native Method)
03-30 20:25:34.110: E/AndroidRuntime(30197): Caused by: java.util.concurrent.ExecutionException: java.lang.AbstractMethodError: abstract method not implemented
03-30 20:25:34.110: E/AndroidRuntime(30197): at java.util.concurrent.FutureTask.report(FutureTask.java:94)
03-30 20:25:34.110: E/AndroidRuntime(30197): at java.util.concurrent.FutureTask.get(FutureTask.java:160)
03-30 20:25:34.110: E/AndroidRuntime(30197): at android.os.AsyncTask.get(AsyncTask.java:482)
03-30 20:25:34.110: E/AndroidRuntime(30197): at com.example.myscalaandroidapp2.DisplayMassageActivity.onCreate(DisplayMassageActivity.scala:60)
03-30 20:25:34.110: E/AndroidRuntime(30197): at android.app.Activity.performCreate(Activity.java:5255)
03-30 20:25:34.110: E/AndroidRuntime(30197): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
03-30 20:25:34.110: E/AndroidRuntime(30197): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2213)
03-30 20:25:34.110: E/AndroidRuntime(30197): ... 11 more
03-30 20:25:34.110: E/AndroidRuntime(30197): Caused by: java.lang.AbstractMethodError: abstract method not implemented
03-30 20:25:34.110: E/AndroidRuntime(30197): at android.os.AsyncTask.doInBackground(AsyncTask.java)
03-30 20:25:34.110: E/AndroidRuntime(30197): at android.os.AsyncTask$2.call(AsyncTask.java:287)
03-30 20:25:34.110: E/AndroidRuntime(30197): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
03-30 20:25:34.110: E/AndroidRuntime(30197): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
03-30 20:25:34.110: E/AndroidRuntime(30197): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
03-30 20:25:34.110: E/AndroidRuntime(30197): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
03-30 20:25:34.110: E/AndroidRuntime(30197): at java.lang.Thread.run(Thread.java:856)
03-30 20:25:34.115: W/dalvikvm(30197): threadid=11: thread exiting with uncaught exception (group=0x419d6930)
03-30 20:25:34.115: I/Process(30197): Sending signal. PID: 30197 SIG: 9
如果我理解正确,它会在启动 AsyncTask 或类似的东西时失败。 代码很蹩脚,可能。因为它,我没有问如何解决它,而是从一开始就问如何去做。但如果你看到错误在哪里,我会很高兴听到它。
【问题讨论】:
-
这个网站是为了帮助用户解决他们的代码的特定问题——你如何完成你的要求?可能有 100 种方法可以做到这一点。关键是你需要付出一些努力,而不是期望人们为你做你的工作。注意到您收到的问题 -7 了吗?这是一个很好的指标,表明您需要进行一些挖掘并提出符合这些准则的问题:stackoverflow.com/help/on-topic 您在没有任何 cmets 的情况下获得了否决票,因为成员厌倦了一次又一次地看到这一点。
-
@SQLiteNoob 这样更好吗?
-
是的!现在社区有一些工作要做。