我正在尝试使用Scala制作Android应用程序。它应该发出GET请求。我看到一些实现这种功能的Java代码,但这对我没有多大帮助。那么,有人可以解释我该怎么做,或者给出一个代码示例吗? 现在我有:斯卡拉http请求中的Android应用程序
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种方法可以做到这一点。关键是你需要表现出一些努力,而不是期待人们为你做你的工作。注意你收到的问题?这是一个很好的指标,你需要做一些挖掘工作,然后回答一个符合以下指导原则的问题: http://stackoverflow.com/help/on-topic 由于成员厌倦一次又一次地看到这一点。 – SQLiteNoob
@SQLiteNoob更好吗? – Rei
是的!现在社区有一些东西可以合作。 – SQLiteNoob